// 被测试的函数：加法
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 被测试的函数：除法（可能出错的函数）
pub fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        return Err("除数不能为0".to_string());
    }
    Ok(a / b)
}

// 测试模块：只在运行 `cargo test` 时编译
#[cfg(test)]
mod tests {
    // 导入父模块的函数（因为测试模块是子模块）
    use super::*;

    // 测试 add 函数（成功案例）
    #[test]
    fn test_add() {
        // 断言：判断结果是否符合预期
        assert_eq!(add(2, 3), 5);  // 相等则通过
        assert_ne!(add(2, 3), 6);  // 不相等则通过
    }

    // 测试 divide 函数（成功案例）
    #[test]
    fn test_divide_success() {
        assert_eq!(divide(6, 2), Ok(3));
    }

    // 测试 divide 函数（失败案例：预期触发错误）
    #[test]
    fn test_divide_by_zero() {
        // 断言：判断是否返回预期的错误
        assert!(divide(6, 0).is_err());
        assert_eq!(divide(6, 0), Err("除数不能为0".to_string()));
    }

    // 测试失败的例子（故意写错，演示测试失败效果）
    #[test]
    fn test_failure_demo() {
        // 这个测试会失败，因为 2+2 不等于 5
        assert_eq!(add(2, 2), 5);
    }
}
